Allora... ho aggiornato la funzione così come mi hai detto:

codice:
var campi = new Array("campo1", "campo2" ); 

function somma(ff) {
  alert("entrato nella funzione"); 
  var tot = 0;
  alert("ci sono "+campi.length+" campi da sommare");
  for(var i=0; i<campi.length; i++) {
    alert("sto per aggiungere il campo "+ff.elements[campi[i]].name);
    var c = ff.elements[campi[i]].value;
    alert("il suo value e` "+c);
    if(c=="") c="0";
    if(c=='NaN') {alert("Not A Number"); c=0;}
    tot += parseInt(c,10);
  }
  ff.totale.value = tot;
}
se metto un numero nel campo vecchio e tolgo il cursore, mi mostra gli alert:

- "entrato nella funzione" e "ci sono 2 campi da sommare"

poi aggiungo un campo nuovo (e non ci inserisco niente), modifico il campo vecchio e mi mostra gli alert:

- "entrato nella funzione" e "ci sono 3 campi da sommare"