I'm not sure exactly what you mean, but if you're trying to load a scene at a button press, but want the animation and sound to finish before doing so, you could try an Update loop or a coroutine WaitForSeconds(); you can look up how to do coroutines in the Unity documentation. Although that might be a little elaborate for your needs.
The simpler solution might be the update loop. It's probably not ideal, since coroutines are probably more efficient, but it's easier to implement:
Update ()
{
if (Time.time > nextTime)
{
Application.LoadLevel(levelToLoad);
}
}
Button ()
{
nextTime = Time.time + 1.0f; //delay in seconds
levelToLoad = 0; //level you want to load
}
Just set your delay as long as you need to complete the tween and audio. 
Thank You!.

I try to explain a little more detailed, but is more or less as you say.
I have a "ButtonControl" Script that I made to control all my buttons from a centralized location:
Example:
public void buttonPlay (){
Application.LoadLevel("Play");
}
public void buttonAbout (){
Application.LoadLevel("About");
}
public void buttonGooglePlus (){
Application.OpenURL("");
}
A "button" is composed by:

The "UIEventTrigger" - "On Release", notify to the "ButtonControl" Script and "SoundEffects" Script, the first do something (Load a level, open a url, etc...), the second play a "click" sound, but when is pressed the "Tween Scale" and the Sound are cut off, I want to add a delay to prevent this.
I know how to add the delay (Invoke, coroutine WaitForSeconds(); as you say, etc...), but not how to keep control of all buttons in a single Script with these methods. (Not even know if it's possible.)
