Primo: usa setInterval
Secondo: controllare ogni volta lo stile dell'elemento non ha senso, conserva il valore in una var.
Terzo: la referenza all'oggetto prova lo devi prendere una volta e basta...

codice:
function miafunzione(){
  // blah blah;
  var margin = 0, //Valore iniziale del margin
       s = document.getElementById("prova").style,
       i = setInterval(function() {
         if(margin > 500) {
           clearInterval(i);
  	   s.marginTop = '0px';
         }
	 else
	   s.marginTop = ++margin + "px"; 
       }, 50);
}

Attento che non ho verificato, incrocia le dita