Нельзя так делать. Некоторые браузеры должны даже ошибку выкидывать при попытке сменить тип поля. Это связано с секьюрностью типа. Обычно в таких случаях делают подмену на обычное текстовое поле со значением из поля пароля.
<table>
<tr>
<td>Password:</td>
<td><input type="password" id="pass"></td>
</tr>
<tr>
<td></td>
<td><label><input type="checkbox" id="check"> Show password</label></td>
</tr>
</table>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
$('#check').change(function() {
var $pass = $('#pass');
if (!$pass.next().is('.pass-show')) {
$('<input class="pass-show">').val($pass.val()).hide().insertAfter($pass);
}
if ($(this).is(':checked')) {
$pass.hide().next().show();
}
else {
$pass.show().next().hide();
}
});
</script>