@andrea proxy based object doesn't support recursion. When you enter the combine object from the right inlet, you are in the outlet call of message "b", when you enter the combine object it's from inlet 1 and everything which is happening after is still coming from the original message so, for combine you're still using the inlet 1, which triggers.
@Terrry: that's a good way to avoid the recursion indeed.
Yes, that's what I feared... but recursion actually works with proxy-based objects, as long as the main inlet doesn't come into play... no hope to have that working for the main inlet as well in some future release? And no other way to tell if a message is coming from the main inlet, instead of a proxy? (maybe this should be moved to the Dev forum though...)