A really useful way to set faces is to use the M-x list-faces-display function. This function will pop up a buffer with the face name on the left and an example on the right. This buffer then lets you customize any of the faces and to see what the face definition is. The one possible 'gotcha' is that it will only display the faces it knows about at the time you run the function. This means that if you haven't loaded org-mode for example, you may not see any org-mode face definitions.
One of the useful options when defining a face is the inherit option, which tells the face to inherit the settings of another face. Some of the inherited values can be overridden (such as face colour) in the 'main' face definition.
So, in your case, I would set the appropriate values for the default fixed and variable width fonts, then set the other faces i.e. org-mode faces to inherit from those definitions.
doing it this way shold eliminate the need to do any add-hook jiggery pokery