Вопрос элементарный наверно, но почему цепочка
$("#q").hide(1000).text("NEW TEXT").show(1000);
скрывает и показывает новый текст, а старый визуально не трогает?
В вашем пример через callback насильно вызываем
$("#q").text("NEW TEXT").fadeIn(1000)
а в цепочки hide(1000) первым не выполняется почему то.