These are somewhat complicated situations, and it's kind of hard to address them in a paragraph. I'll defer mostly to the book here for the details of complex deployments, as we give some general strategies there.
Most of your differences in multiple deployments are in the vendor specific deployment descriptors. I can recall a single deployment I've seen where the ejb-jar.xml was different for the same web application. If you are working on multiple servers, XDoclet can handle this
with the vendor specific tags. Otherwise, you need to isolate those changes (usually a very small number) into
ant properties and use XDoclet's "${variable.substituion}".
Other techniques that I've seen is to subclass your bean. Create "XFooBean" and "YFooBean" from your FooBean. Each of those can contain the deployment information related to it. With some custom attributes on the class, you can use havingClassTag on the task to select only the beans for the project you are building. Remember, J2EE is all about components and so replacing one bean with another just like it isn't a big deal.
Remember, XDoclet lets you simplify the complexities of J2EE when you don't need it. When you DO need the J2EE complexities, then you don't want to use all of XDoclet's features.
Maybe you want to let it generate your interfaces and value objects and ejb-jar.xml but not your vendor deployment descriptor. Maybe you don't want it to ejb-jar.xml but you are ok letting it do your web.xml and your vendor web deployment descriptor. XDoclet is pretty flexible there.