For instance, consider this simple case with two modules:
Module "lowerlevel":
Module {
    property string prop: "value in lowerlevel module"
}
Module "higherlevel":
Module {
    Depends { name: "lowerlevel" }
    lowerlevel.prop: "value in higherlevel"
}
Product using these modules:
Product {
    type: "mytype"
    Depends { name: "higherlevel" }
    Group {
        files: ["dummy.txt"]
        fileTags: ["dummy-input"]
    }
    Rule {
        inputs: ["dummy-input"]
        Artifact {
            filePath: "dummy.out"
            fileTags: product.type
        }
        prepare: {
            var cmd = new JavaScriptCommand();
            cmd.sourceCode = function() { };
            var prop = product.moduleProperty("lowerlevel", "prop");
            cmd.description = "lowerlevel.prop is '" + prop + "'.";
            return [cmd];
        }
    }
}
The value printed is the one from the lower-level module, when one would except it to get overridden by the higher-level module. Note that it does not make any difference where the rule is located; it could also be in either of the modules, with the same result.