Firstly, when you add to the main class of Fizz, its instances do not get the method as the instances have already been factored out and added to memory.
So one way of approaching this is to use the method signature from the original class. Therefore instead of
fizz.doStuff(blah)
call the method of the class. Therefore
fizz.&doStuff(blah)
This gets the method signature from the originating class, but uses the attributes from the instance. However as you can imagine, since its calling the originating class, this is a slightly heavy call.
Now one alternative of pushing out to every instance is to make the instances ExpandoMetaClass instances of Fizz. Hence...
Fizz.metaClass.doStuff = {return "blah"}
fizz = new Fizz()
Fizz.metaClass.doOtherStuff = {return "more blah"}
assert fizz.doOtherStuff() == "more blah"
Hope this helps
UPDATE:
Full code example:
class Fizz{
}
Fizz.metaClass.doOtherStuff = {return "more blah"}
def fizz = new Fizz()
assert fizz.doOtherStuff() == "more blah"
def fizz1 = new Fizz()
assert fizz1.doOtherStuff() == "more blah"