1. A method for customizing a software application, the method comprising: receiving, by a computer system, a base metadata document defining one or more characteristics of at least a portion of the software application; identifying, by the computer system, a plurality of customization documents defining modifications to the base metadata document, wherein the plurality of customization documents are stored separately from the base metadata document, and wherein the identifying the plurality of customization documents comprises: determining a plurality of customization levels associated with the base metadata document, each of the plurality of customization levels representing a scope for which the base metadata document can be customized, the plurality of customization levels being determined by accessing a configuration file comprising mappings between customization levels and base metadata documents, wherein the plurality of customization levels are sorted in a precedence order; and identifying a customization document for each customization level in the plurality of customization levels, wherein the customization document is identified based on one or more runtime attributes corresponding to the customization level; and generating, by the computer system, a customized metadata document by applying the plurality of customization documents to the base metadata document in the precedence order.