Ok, the problem here is that our respond_to? caching logic unconditionally tries to call respond_to_missing? on a false result, even when the false result is coming from a user-defined method. This is incorrect. It should only attempt to try to call respond_to_missing? if the built-in respond_to? would return a false result.
Because repairing this behavior would require making the caching logic more complicated (due to the need to check if respond_to_missing? is the default impl or not) I'm going to just disable caching of respond_to? results in 1.9 mode. We'll need to revisit this.
Inconsistent on Java 7 as well. It's either doing it right or failing to do it at all.
1.9.3 does not raise this error.