@KristerAndersson That's spot on, you should put it in as an answer
–
Clive♦Feb 17 '14 at 10:10

@KristerAndersson: It does work. But when I save the content originally with no body field then $node array shows $node->body as an empty array. However, using the logic you suggested, it shows $node->body as an array with $node->body[language] as empty array. I am worried this may not be ideal. Could you please support your answer with something that can convince me that it is safe to do so.
–
kmdhrmFeb 17 '14 at 10:11

@Clive: Why does saving $this_node->body as empty array gives the PDOException error, while saving $this_node->body[$this_node->language] as empty array does not give the error
–
kmdhrmFeb 17 '14 at 10:14

Because the first method is incorrect, and the second method is correct :) Basically with the first method you're not providing a language code, which is necessary for the field API, and incorrect data is getting into the database. Next time you try to do the same thing, integrity constraints fail, and you get the error.
–
Clive♦Feb 17 '14 at 10:19