I am not recommending that you put the 100ms hack into NGUI. It's a hack workaround that I do not like very much.
I'm also not suggesting that you remove the ability to click on multiple things in a single frame. If you read my messages above, our game actually relies on this functionality as well in some contexts (gameplay buttons). It's certainly a valid use case.
However, I strongly disagree with this:
Simply put, if your game requires this kind of restriction then you should add it for that particular game.
... because I think that the use case for one-button-at-a-time is also exceedingly common. Common enough that it should probably be the default behavior of NGUI, and multi-button support an option. In regular menus-and-buttons UI, which of course is what many of us use NGUI for, there's almost never a reason to allow multiple buttons to be clicked at once. Modern touch OSes go out of their way to prevent this from happening, actually, because having to consider race conditions with every OnClick() script that you write is very arduous.
This is obviously an issue if games like Subway Surfers are forced to turn multitouch off to avoid having more than one button clicked in their UI. It's certainly an issue for us, and I can see that the Temple Run devs tried to mitigate it with some success but still have problems.
So, to be very clear about my intent with this message: as a long-term feature/bug request, please consider reworking the way that click messages are sent to buttons so that we can avoid having to worry about these sorts of race conditions.
Now, the second part of my message is to ask you about ideas for potential workarounds that I could implement myself. I think the feature I am requesting is a fairly huge, and I would expect it to take time and some thinking to do right. But for now, I'm interested in ways I could modify my use of OnClick / UICamera to mitigate race conditions. From that perspective...
SendMessage has nothing to do with any of this.
... SendMessage is actually the core of the problem, because messages do not have return values. UICamera should probably stop sending click events after one of them reaches a target that processes it, but there isn't a good way to drop out of that loop at the moment because SendMessage is used rather than a function call.
I have a bunch of ideas for how I could modify this, or add some support scripts to protect myself against multiple simultaneous clicks. But perhaps you have a better idea, or at least a direction that I could pursue?
Thanks.