$body variable not working
Actually, the documentation for node.tpl.php says, in the description for the $content variable.


  An array of node items. Use render($content) to print them all, or print a subset such as render($content['field_example']). Use hide($content['field_example']) to temporarily suppress the printing of a given element.


The node body is a field, and you should use render($content['body']) to render it.

The note about field variables is the following one:


  Field variables: for each field instance attached to the node a corresponding variable is defined; for example, $node->body becomes $body. When needing to access a field's raw values, developers/themers are strongly encouraged to use these variables. Otherwise they will have to explicitly specify the desired field language; for example, $node->body['en'], thus overriding any language negotiation rule that was previously applied.


You should use $body only when you need to access the field's raw values, not to render the field.