extend() doesn't go through the properties recursively.
For the following case:
var a = {prop1: {prop1a: "1a", prop2a: "5a"}};
var b = {prop1: {prop1a: "1b"}};
$.extend(a, b);
you would expect the result:
a = {prop1: {prop1a: "1b", prop2a: "5a"}
but the result currently is:
a = {prop1: {prop1a: "1b"}
It copies (overwrites) the property "prop1" from "b" wihthout keeping "prop2a" from "a".
This code snipped fixes the bug (just replace the while loop in "jQuery.extend" with this code)
while (prop = arguments[a++])
// Extend the base object
for ( var i in prop )
{
// prevent endless inheritances/loops
if (target == prop[i])
continue;
// extend recursively if current prop is an object, and
// target has props of the same name
if (typeof prop[i] == 'object' && target[i])
jQuery.extend(target[i],prop[i]);
else
target[i] = prop[i];
}