I think the problem you have is basically that you have the Java thinking of calling a method will call the method directly and be done with it. Well not even Java does that, but those things are hidden in the JVM. Groovy has not the luxury of modifying the JVM, so a set of methods might be called before the final method is called. Since this is an implementation detail the sequence may vary. And since Groovy is a language with runtime meta programming the target method you expect might not be called at all.
Anyway, to be able to call the method getName() in Groovy, the Groovy runtime first has to get the meta class of the Object the call is made on, which results in a call to getMetaClass(). If you intercept here, then you might never get to that method call you want.
The solution is actually easy... you just filter those helper methods. That would be any method starting with $ and any method starting with this$, as well as super$, and the getMetaClass method. Filtering means here you do not intercept, but simply continue the call by using Reflection. If you met one method that is not in that set, then you most probably have the target. in your example method.getName() will then return "getName".