tl; dr : para navegadores modernos, basta usar
input.value = '';
Resposta antiga:
E se:
input.type = "text";
input.type = "file";
Ainda preciso entender por que isso não funciona com o webkit .
De qualquer forma, isso funciona com o IE9>, Firefox e Opera.
A situação com o webkit é que parece que não consigo alterá-lo novamente para o arquivo.
Com o IE8, a situação é que ele lança uma exceção de segurança.
Edit:
Para webkit, Opera e firefox, isso funciona, no entanto:
input.value = '';
(verifique a resposta acima com esta proposta)
Vou ver se consigo encontrar uma maneira mais limpa de fazer esse navegador cruzado sem a necessidade do GC.
Edit2:
try{
inputs[i].value = '';
if(inputs[i].value){
inputs[i].type = "text";
inputs[i].type = "file";
}
}catch(e){}
Funciona com a maioria dos navegadores. Não funciona com o IE <9, isso é tudo.
Testado no firefox 20, chrome 24, opera 12, IE7, IE8, IE9 e IE10.