wait.... you have megaman and his mega buster out frames as one object? What I always did was have MegaMan as one object, and then his mega buster arm out frames as another object. Turn this invisible, and when player presses button to change variable, make the buster arm out frames visible, & shoot the object. This would have corrected any animation error displays, and sync animations with MegaMan's normal animations. just saying.
I did the same thing back in the day. Just keep Megs' two animation objects synced and you're good to go.
Even in C++, when I did a Megaman themed experiment, I have two animation instances in his object, doing the same basic concept.
I was however using SNES and PS1 sprites for these, so I had to bind the buster nozzle to the 'action point' for firing, since bullets weren't fired the same height with those sprites of course. The difference here though was I also made the buster it's own segmented part, removable to compensate for the Mega-Arm alternate weapon I coded in. Same for using the hand instead of the buster, like some NES games did. I did the copout and just had him in his firing stance for the Mega-Arm being shot out, but, realistically in MMV he changes back to a normal stance waiting for it to return, just without an arm. What I would have done is make ANOTHER instance of animations just for the MegaArm variations, but I didn't bother to for the scope of the experiment, but did at least prove the point to myself that it was a viable method to do so.
I believe 5th is right though, in that the NES bullet paths don't bob, just Megaman's buster that seems to. Either way though, the double object visibility method is still a very viable way to go about it, and perhaps the easiest in some cases.