Alex
Ну к примеру, я передаю в fade функцию scrollOff с параметром add или remove, в зависимости от того, добавить ли класс .scroll_off к body или убрать, класс должен добавляться/убираться строго после выполнения анимации, а если я запущу функцию scrollOff после fade при клике на кнопку - они будут срабатывать синхронно, т.е. scrollOff не будет ждать, пока выполнится полностью setTimeout у fade
Ну в какое время анимация заканчивается? В такое время вставляй сеттаймаут с добавлением или чего желаешь. А для плавности используй свойство animation.
А вообще если запутался, изобрази на бумаге график всего чего там написал, может ясность после этого появится.