I don't think I understand the issue.
How do you play the animation? Is this right?
At the last frame of an animation, from anim_main, you call
anim_main.Play('...")
anim_1.Play('...")
anim_2.Play('...")
Is that correct?
If so, the behaviour is more or less undefined. Remember in Unity there is no order of update functions, so lets say anim_main.Update happens BEFORE anim_1 and 2. Then from anim_main.Update, where the animation event gets triggered, you call Play on _main, _1 and _2. So now update happens on _1 and _2, and they are now one frame ahead of _main.
I hope that makes sense - you will have to deal with this kind of sequencing at some point or other when making a Unity game if you need ANYTHING sequenced precisely. There are many ways to work around this, you will have to try something like this - from the event, create a coroutine. Coroutines run at the end of the frame after EVERYTHING, after all the Update functions, so you will have a synchronised play.
http://docs.unity3d.com/Documentation/Manual/ExecutionOrder.htmlfor more info.