на правах предположения, я пишу лишь по аналогии с продуктом, который позволяет обращаться к объектам браузера (nightmare.js) В нем использование объекта document допустимо лишь в тех функциях, которые передаются в браузер на исполнение. В вашем случае думаю должно быть нечто похожее.
при вызове f.defer this = f , по сути метод дефер, является методом для всех функций, так как ты его добапвил в прототип, использует this для получения функции и работы с ней, ну а дальше думаю все очевидно
ILoveYAnny: obj [1] == diff [1] если ложь, то произошло изменение, записывать в объект все данные на основной уровень все форме ключ как название, цвет как значение