I agree that a given piece of metadata only existing one place in the model should be the pattern. The template idea makes that relatively painless.
An exception I could see to that would be an element that represents a more general notion of a system property. Formalize the system property substition concept with an element that represents a variable that could be referenced elsewhere.
As to the homogeneous group notion, my thoughts on this were to have a "profile" notion that would encapsulate most of the common configuration. Then clusters, groups or standalone servers would declare what profile they run. This is copied from something I whipped up on a plane to show people in recent clustering meetings, so take it as an illustration only:
<domain>
<profile name=”jee”>.... define a set of capabilities, configuration thereof</profile>
<profile name=”datagrid”>.... define a different set of capabilities</profile>
<profile name=”XYZ">.... define a third set of capabilities</profile>
<cluster name=”JEECluster” mcast_addr=”234.5.6.7” default_stack=”udp” profile=”jee”/>
<cluster name=”DataGrid” mcast_addr=”235.6.7.8” default_stack=”udp” profile=”datagrid”/>
<server-group name="SomeGroup">
<server-group-property name="foo">bar</server-group-property>
</server-group>
<server name=”jee1” bind_address=”192.168.0.100”>
<cluster-ref name=”JEECluster” cluster_address=”10.0.0.100”/>
</server>
<server name=”jee2” bind_address=”192.168.0.101”>
<cluster-ref name=”JEECluster” cluster_address=”10.0.0.101”/>
</server>
<server name=”grid1” bind_address=”192.168.0.102”>
<cluster-ref name=”JEECluster” cluster_address=”10.0.0.102”/>
</server>
<server name=”grid2” bind_address=”192.168.0.103”>
<cluster-ref name=”JEECluster” cluster_address=”10.0.0.103”/>
</server>
<server name=”somegroupA” bind_address=”192.168.0.104”>
<server-group-ref name=”SomeGroup”/>
</server>
<server name=”somegroupB” bind_address=”192.168.0.105”> <server-group-ref name=”SomeGroup”/>
</server>
<server name=”standalone” bind_address=”192.168.0.106”>
<profile-ref name=”XYZ”/>
</server>
</domain>
A "cluster" element defines some clustering-related configuration. A server-group is a general group but not a cluster. Not sure exactly what that would be; but I threw it in, as Rich Sharples mentioned it had proved useful. Then a standalone server.
Jason, I'm not sure what a "clustered-service" is.