Assuming that you are expecting json, I'd simply try and parse it like json and catch any errors.  Also see jQuery.parseJSON.
try {
    jQuery.parseJSON(response);
} catch(error) {
    // its not json
}
If you are expecting one of a number of different response types (i.e. it might be json or it might just be text, etc) then you might need to get more complicated.  I'd use xhr.getResponseHeader("content-type").  See this blog post for some great detail on handling content types.
$.ajax({
    type: "POST",
    url: "/widgets", 
    data: widgetForm.serialize(), 
    success: function(response, status, xhr){ 
        var ct = xhr.getResponseHeader("content-type") || "";
        if (ct.indexOf(‘html’) > -1) {
            widgetForm.replaceWith(response);
        }
        if (ct.indexOf(‘json’) > -1) {
            // handle json here
        } 
    }
});