Woraleeee, algo asi como un word que reemplaza las palabras, pero en vez de palabras quieres reemplazar un caracter, buenooo, veamos....
 
y lo primero que tenemos que hacer es crear un array con los caracteres "no validos" y los caracteres por los que se van a reemplazar,  y un timer que verificara el contenido del text para reemplazarlo, para el array tratemos de minimizar un poco en vez de el clasico array de mil lineas.  
arr[0]= 1
arr[1]= 2
arr[2]= 3
arr[3]= n.. 
usemos un JSON, por lo cual queda de la siguiente manera...    
Código Javascript
:
Ver originalvar MyWords= {'Find':['#', '&', '$', '%', '/', '{', '}'], 'Replace':['a', 'b', 'c', 'd', 'e', 'f', 'g']};
var tiempo = setInterval('PARSE_CHARACTER();', 10);
  
una vez hecho esto construiremos una función que obtendra el valor del primer textbox y validara mediante el array que caracter no es válido y lo reemplazara, asignando el nuevo valor al textbox automático    
Código Javascript
:
Ver originalfunction PARSE_CHARACTER(){
   try{
      var TempTxt=document.getElementById('txt_manual');
      var MyString=TempTxt.value;
      var NewText;
      for(var i=0;i<MyWords.Find.length;i++){
         while(MyString.indexOf(MyWords.Find[i])>-1) {
            pos = MyString.indexOf(MyWords.Find[i]);
            MyString = "" + (MyString.substring(0, pos) + MyWords.Replace[i] + 
            MyString.substring((pos + MyWords.Find[i].length), MyString.length));
      }
   }
   var MyTempTxt=document.getElementById('txt_auto');
   MyTempTxt.value=MyString;
   }catch(e){
      alert("UNKNOW EXCEPTION");
   }
}
  
paso por paso, lo primero que hace esta función es obtener el valor del primer textbox y asignarselo a la variable MyString.  
var TempTxt=document.getElementById('txt_manual');
var MyString=TempTxt.value; 
Mediante el For recorremos todos los valores del array y mediante el while buscamos si existe cada una de ellas en MyString  
for(var i=0;i<MyWords.Find.length;i++){
while(MyString.indexOf(MyWords.Find[i])>-1) { 
si existe substituimos...  
MyString = "" + (MyString.substring(0, pos) + MyWords.Replace[i] + 
MyString.substring((pos + MyWords.Find[i].length), MyString.length)); 
y el nuevo valor se lo asignamos al txt_auto...  
var MyTempTxt=document.getElementById('txt_auto');
MyTempTxt.value=MyString; 
el bloque 
try{}catch(e){} nos enviara un alerta pos si algo sale mal 
alert("UNKNOW EXCEPTION"); que no lo creo... 
y nuestro código juntadito y armadito, queda de la siguiente manera...    
Código HTML:
Ver originalvar MyWords= {'Find':['#', '&', '$', '%', '/', '{', '}'], 'Replace':['a', 'b', 'c', 'd', 'e', 'f', 'g']};
var tiempo = setInterval('PARSE_CHARACTER();', 10);
 
function PARSE_CHARACTER(){
   try{
      var TempTxt=document.getElementById('txt_manual');
      var MyString=TempTxt.value;
      var NewText;
      for(var i=0;i<MyWords.Find.length;i++){
         while(MyString.indexOf(MyWords.Find[i])>-1) {
            pos = MyString.indexOf(MyWords.Find[i]);
            MyString = "" + (MyString.substring(0, pos) + MyWords.Replace[i] + 
            MyString.substring((pos + MyWords.Find[i].length), MyString.length));
        }
      }
      var MyTempTxt=document.getElementById('txt_auto');
      MyTempTxt.value=MyString;
   }catch(e){
 
   }
}
<input type="text" id="txt_manual" /> <input type="text" id="txt_auto" /> 
  
espero que te sea de ayuda.... y cualquier cosa comentas... 
EXITO !!!