<p>My application is logically divided into server, which contain my Grails domain objects and controllers; and client, where I have my Ext GWT classes that build all the UI pages.</p>

<p>For UI requests, I am using an AJAX call to a controller method that returns, for instance, a list of domain objects as a JSON structure.</p>

<p>Following the DRY principle, I wouldn't like to "serialize" the domain data to a JSON string on the server then de-serialize it on the client to another structure - I'd like to take advantage of the Domain object I already have, this I don't have to change multiple places when I add, change or remove a new field.</p>

<p>Question is: is that a good way to go? </p>

<p>If yes, how would be the best way to make .groovy domain objects available on the "client-side" Ext GWT Java classes?</p>

<p>If no, why is it bad and what would you advice instead?</p>

There isnt a good way - you need a java object that is GWT serializable. The only real solution that I can see is to write a plugin (or add to the GWT plugin) a way to autogenerate the data transfer object, perhaps using annotations in a grails domain object.
A similar method is being used to autogenerate the RPCAsync interfaces in the gwt plugin - see GwtGrailsPlugin.groovy in the gwt plugin directory, line 133 or so is the start.
You could hook into that (or just modify that file directly, probably easier) and insert some code to generate the data transfer files. An added benefit could be that you could granularize the data transfer object so that private data (like passwords!) dont get transferred.