Допустим мы хотим послать письмо жителю домика.

Если на домике есть addr:postcode, то берем его,
иначе смотрим улицу, указанную в addr:street, если на ней стоит postal_code, то берем его,
иначе смотрим населенный пункт (указанные в addr:city или в чьи границы place он попал), если у него стоит postal_code, то берем его.

Так вроде работает, что-то далее усложнять только всех запутает.