I think we're talking past each other.

 1. If there's an existing implementation, we know the type encoding with which to create a new method.
 1. If there's no existing implementation, we have to assume that it returns `void` and accepts as many objects as there are colons in the selector name.
 1. I believe @joshaber was asking if manually adding an empty implementation to the class (i.e., in a .m file normally) would avoid the above, and it's true that it would.

`objc_msgForward` _is_ capable of taking anything, but the way it _interprets_ the stack is based on the type encoding of the method that wasn't found. Normally, this would be obtained from `-methodSignatureForSelector:`, but we give the runtime enough information by explicitly implementing the selector.