Well I have been doing some testing and the macro works for only one instance per template.
If I put:
{% CurrentDocument.Children.ClassNames("CMS.MenuItem").Count %}
I get the same count for both macros. So if the CurrentDocument has 7 CMS.MenuItem children both of the above macros returns 7.
I have tested this in the same webpart and being in multiple webparts. Whatever macro get ran first all the rest return its value.
Is there a way to avoid this from taking place?