Es raro, supongo que será por cuestiones de seguridad. Igualmente tu script funciona perfecto, con cualquier tipo de input que no sea file.Altareum.
<body><input type="file" id="boton1"><script>function cambiar(){ obj = document.getElementById('boton1'); var newobj = obj.cloneNode(true); newobj.value=''; obj.parentNode.replaceChild(newobj, obj); }</script><a href="javascript:cambiar()">cambiar</a></body>