+1 Looks good, with one caveat. I would rather ScriptBasedClusterAction didn't install any scripts by default, since they may not be needed by all services, and they bulk up the aggregated scripts that are transferred over SSH to each node. Also, in a Puppet or Chef world, they would be unused, I think.
Would it be reasonable to have action handlers do the registration? (I'm thinking that we could shorten the syntax so you can register more than one script in one go: e.g. addStatements(event, allOf("install_java", "install_service", "remove_service")); - this could go in a future JIRA, if needed.)