si cojes la opcion de 
 
Código:
 <TR style='cursor: pointer' onclick='muestra(001)'>
  no te va a funcionar, ya que no pasas el objeto  TR a la funcion.
Puedes pasarlo como segundo parametro  
Código:
 <TR style='cursor: pointer' onclick='muestra(001,this)'>
  ahora la funcion sera.. 
Código:
 function muestra(valor,objeto){
    alert(valor);// tiene que aparecer 001
    objeto.className=objeto.className=='marcado'?'desmarcado':'marcado';
}
  
ahora prueba de poner esta funcion  
Código:
 function muestra(valor,objeto){
    objeto.className=objeto.className=='marcado'?'desmarcado':'marcado';
    alert(valor);// tiene que aparecer 001
    alert(objeto.cells[0].childNodes[0].nodeValue);// tiene que aparecer 001 tambien
}
  resumiendo, si a una funcion le pasa como parametro THIS, estas haciendo referencia al objeto que la llama. Con eso puedes obtener lo que quieras. 
otro ejemplo:(stoy yo con ganas de hablar)   
 Código PHP:
    <html>
<head>
<STYLE TYPE="text/css">
.desmarcado{
    background: transparent;
}
.marcado{
    background: #99F;
}
 
</STYLE>
</head>
<body>
<table id='TABLApepe' border='1'>
  <thead>
    <tr><th>nombre</th><th>apellido</th></tr>
  </thead>
  <tbody>
     <tr style='cursor:pointer' class='desmarcado' onclick='muestra(this)'><td>pepe</td><td>goteras</td></tr>
  </tbody>
</table>
 
<table id='TABLApepe2' border='1'>
    <tr><th>nombre</th><th>apellido</th></tr>
    <tr style='cursor:pointer' class='desmarcado' onclick='muestra(this)'><td>manolo</td><td>benito</td></tr>
</table>
<script type="text/javascript">
function muestra(objeto){
    objeto.className=objeto.className=='marcado'?'desmarcado':'marcado';
    alert(objeto.cells[0].childNodes[0].nodeValue);// tiene que aparecer pepe
 
    //si quiero saber el id de la tabla, que no deja de ser un parametro
 
    alert(objeto.parentNode.parentNode.id);// tiene que aparecer TABLApepe o TABLApepe2 
 
    //parentNode lo que haces es preguntar por el padre del TR, osea el TBODY y luego su padre, que es la tabla y nos da el id
 
    alert(objeto.offsetParent.id);// tambien aparecera TABLApepe o TABLApepe2
 
    //offsetParent nos situará en la tabla
 
}
</script>
</body>
</html> 
   
  
Ahora tengo 2 tablas, en una con THEAD y TBODY y la otra no.
En la funcion javascript va a preguntar por los padres y aunque no hayas puesto el tbody, realmente existe y cuenta para moverte a traves del objeto.
Si nos movemos con los hijos CHILDNODES pasa lo mismo, por eso utilizo mejor los parametros rows y cells.
ejemplo: 
Código:
 <script type="text/javascript">
alert(document.getElementById('TABLApepe2').rows[0].cells[0].childNodes[0].nodeValue);
</script>
  te dará el texto de la primera celda, osea, 'nombre' 
todo esto lo he investigado con firefox y realmente me ha ayudado mucho, ya que el DomInspector que viene al instalarlo, te daria la tabla en forma de arbol. ejemplo TABLApepe2. 
Código:
 TABLE
   |---text(vacio)
   |---TBODY
   |     |----TR
   |     |   |---TH
   |     |   |    '----text(aqui vendria nombre)
   |     |   '---TH
   |     |         '----text(aqui vendria apellido)
   |     |----text(vacio)
   |     |----TR
   |     |    |---TD
   |     |    |    '----text(aqui vendria manolo)
   |     |    '---TD
   |     |          '----text(aqui vendria benito)
   |     '----text(vacio)
   |....etc
  un saludo...