Model with complex/simple properties
Not a JavaScript pitfall per se, but I'd stay away from using two variable names that are only differentiated by the case of the second letter in a single lexical scope like that. (JsonObject vs JSonObject)

Also, the bindFormToJson function is re-defining the iterateJson function every time it is called, which a waste of cycles (not egregious, but less than ideal). Using coffeescripts do notation is a handy way to create a closure and return a value from it:

$ -&gt; $.fn.bindFormToJson = do -&gt;

    iterateJson = (Source, FullKey, Seperator, func) -&gt;
        for key, value of Source
            newKey = ""
            if FullKey == ""
                newKey = key
            else
                newKey = FullKey + Seperator + key

            if typeof(value) == "object" 
                iterateJson value, newKey, Seperator, func  
            else 
                func newKey, value

    return (JsonObject, OverwritePopulatedFields) -&gt;
        selector = $(this).selector
        iterateJson JsonObject, "", "_", (key, value) -&gt; 
            field = $(selector + " #" + key)
            currentValue = field.val()
            if (currentValue and OverwritePopulatedFields) or not currentValue
                field.val(value)


The return is unnecessary, but I figured it can't hurt to be explicit about what's happening there.