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