Hola:
Has tenido el eterno problema del "copy & paste" sin revisar el código... es que dentro del atributo name has puesto un carácter de más (un ";")... ya que copias y pegas, voy a ponerte el código bueno:
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>
http://www.caricatos.net/probador
</title>
</head>
<body>
<form onsubmit="for (i = 0; i < this['userfile[]'].length; i++) this['userfile[]'][i].disabled = false" action="javascript: alert('Ok')" >
<input type="file" onchange="x=this.cloneNode(true); x['value'] = ''; this.parentNode.insertBefore(x, this.nextSibling); this.disabled = true;" name="userfile[]" />
<button type="submit"> enviar </button>
</form>
</body>
</html>
He cambiado el appendChild por un insertBefore como comenté anteriormente.
Saludos