Right, maybe it should be SyntaxError only if there is a * used inside a lambda/proc body (as a value), where the lambda/proc declares a * parameter (like def m(*); ->(*) { p(*) }; end).
IOW when using * both in method and block scopes, where the block scope is inside the method scope.
I honestly believe it would be more reasonable to allow anonymous argument handling for procs, too.
It would be consistent and clear, no special edge cases due to, say, code copying (yes, there would be edge cases to demonstrate "how confusing you can make the code by abusing the feature," but such demonstrations could be made with Ruby 1.8.6 too).
I believe that shadowing of unnamed arguments is not more confusing than shadowing of named arguments, which Ruby always allowed.
Agreed, I think supporting * fully for blocks would be a good way to solve this.
If that's deemed not desirable, then I think such code should be SyntaxError to avoid confusion and make it clear what works and does not.