The reason is that any function with a yield in it becomes a Coroutine. Coroutines cannot work with every Unity feature. For instance, Update and OnGUI cannot be Coroutines. Functions that are called through InvokeRepeating are another such exception.
The solution is simple, just call another function that contains the yield code and call that one from your InvokeRepeating function:
var beat : Rigidbody;
function Start()
{
InvokeRepeating ("BeatMaker",3,4);
}
function BeatMaker()
{
RealBeat();
}
function RealBeat()
{
instance = Instantiate(beat,Vector.zero,Quaternion.identity);
instance.velocity = Vector3.up;
yield WaitForSeconds(0.5);
instance = Instantiate(beat);
instance.velocity = Vector3.up;
}
Note that I also moved your InvokeRepeating call into a start function, as having code outside functions can lead to all sorts of unexpected bugs.