What's the reason for the refactoring here?  It looks like it's functionally equivalent.

If we do keep it, I think you can simply this to:

``` ruby
def proxy_method_invoked(*args, &block)
  proxy.message_received method_name, *args, &block
end
```

* `MethodDouble` already has a reference the proxy via `attr_reader :proxy`
* Once you use the proxy directly you don't need the `obj` argument anymore.

(Obviously, the caller would have to be updated to match).

One alternate refactoring that could make sense instead is to capture the `proxy` in the `define_method` closure above rather than `method_double`...then you could make the body of the method `proxy.message_received method_name, *args, &block`.