The "normalWindow" check was added "just in case", since for Spectacle it's also true. Unfortunately it seems there's literally no other reliable way of checking for Spectacle windows other than hardcoding a check for its resourceClass...
The helper script was also refactored to minimize the amount of callbacks added and the memory used. There's no need to keep callbacks attached for non-active windows, which happened before.
Also it should be more efficient and simpler to send info over with just a single DBus call (also if more fields were to be added).
Both the script and the helper app will send/print info only if it changed since the previous one. Otherwise we'd keep spamming fullscreen false update when navigating the desktop and so on.