$node is only available in content view templates, not pagelayout templates and its includes except when called the first time with view caching on or all the time with view caching off in the 3.3 series and before.
With 3.4 the caching has changed a bit
I suggest to create your own $currentnode variable based on $module_result.node_id
I had the same experience: "Am I dreaming?" A lot of documentation page speaks about this $node thing...
A have a lot of problems with strange and un-decodeable variables in eZp, mainly in xml parts. How could I obtain some parts of the xml text without using the builtin "content" possibilities?