function validate(value, opts) {
    var valObjectDef = exports.valObjectMeta[opts.valType];

    if(opts.arrayOk && isArrayOrTypedArray(value)) return true;

    if(valObjectDef.validateFunction) {
        return valObjectDef.validateFunction(value, opts);
    }

    var failed = {};
    var out = failed;
    var propMock = { set: function(v) { out = v; } };

    // 'failed' just something mutable that won't be === anything else

    valObjectDef.coerceFunction(value, propMock, failed, opts);
    return out !== failed;
}
Coerce shortcut for [un]selected.marker.opacity,
 which has special default logic, to ensure that it corresponds to the
 default selection behavior while allowing to be overtaken by any other
 [un]selected attribute.

 N.B. This must be called *after* coercing all the other [un]selected attrs,
 to give the intended result.

@param {object} traceOut : fullData item
@param {function} coerce : lib.coerce wrapper with implied first three arguments