Neighbor-dependent [2D] substitution systems
Given a list of individual replacement rules such as {{_, 1}, {0, 1}} {{1, 0}, {1, 1}}, each step in the evolution shown corresponds to
Flatten2D[Partition[list, {2, 2}, 1, -1] /. rule]
One can consider rules in which some replacements lead to subdivision of elements but others do not. However, unlike for the 1D case, there will in general in 2D be an arbitrarily large set of different possible neighborhood configurations around any given cell.