src/xblocks/block.js
function mergeCustomizer(objValue, srcValue, key) {
    if (isArray(objValue)) {
        return objValue.concat(srcValue);
    }

    if (key === 'lifecycle') {
        return mergeWith(objValue, srcValue, lifecycleCustomizer);
    }

    if (key === 'events') {
        return mergeWith(objValue, srcValue, eventsCustomizer);
    }

    if (key === 'accessors') {
        return mergeWith(objValue, srcValue, accessorsCustomizer);
    }

    if (key === 'methods') {
        checkOverriddenMethods(objValue, srcValue);
    }
}
function mergeCustomizer(objValue, srcValue, key) {
    if (isArray(objValue)) {
        return objValue.concat(srcValue);
    }

    if (key === 'lifecycle') {
        return mergeWith(objValue, srcValue, lifecycleCustomizer);
    }

    if (key === 'events') {
        return mergeWith(objValue, srcValue, eventsCustomizer);
    }

    if (key === 'accessors') {
        return mergeWith(objValue, srcValue, accessorsCustomizer);
    }

    if (key === 'methods') {
        checkOverriddenMethods(objValue, srcValue);
    }
}
Special handler of merge.
Arrays are merged by the concatenation.
@example
_.mergeWith(obj, src, mergeCustomizer);
@param {*} objValue
@param {*} srcValue
@param {string} key
@returns {Object|array|undefined}
@throws The following methods are overridden
@private