Я такое не реализовывал, но как думаю это нужно делать:
Есть меню. К каждому элементу естественно привязан обработчик который должен скроллить к определенному блоку. И так каждый обработчик сначала должен вычислять координаты своего блока к которому он собирается скроллить, а потом собсна скроллить. так блоки можно будет менять местами, переставлять и добавлять. Я б какой нибудь интерфейс на JS написал перед тем как начать это делать, чтобы каждый раз в обработчике не писать строки отвечающие за вычисление координат. Чтоб связывать элементы меню с блоками было легко. Типа Scroller.assign(menuitem, target);
Координаты элемента на странице