Python 3.5 - 262 236 220 bytes:
-16 bytes graças a @CatsAreFluffy! Agora toda a minha função pode finalmente estar em uma única linha! :)
from collections import*
def a(v):o=OrderedDict;j=[chr(i+97)for i in range(26)];d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26));f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1);[print(d[g])for g in f(v)]
Pode demorar um pouco e pode imprimir novas linhas entre as construções, mas faz o que é necessário. Você pode testá-lo para confirmar.
EDITAR:
Meu código anterior de golfe não imprimiu o padrão certo. No entanto, agora o mostrado acima faz, e faz bem na minha opinião. Você também pode executá-lo para confirmar isso.
Nota: O programa imprime todas as letras minúsculas atrás de cada "edifício". Espero que esteja tudo bem.
Versão não destruída com explicação:
from collections import*
def a(v):
o=OrderedDict # Assign the OrderedSict function to "o"
j=[chr(i+97)for i in range(26)] # Create a list with all 26 lowercase letters of the alphabet
d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26)) # Create a dict assigning each letter it's corresponding building with its corresponding length
f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1) # Return the ABACABA sequence based on the user input
[print(d[g])for g in f(v)] # Print out the building according to the sequence returned by the above lambda function (thanks to @CatsAreFluffy for this method to print it! :) )
Basicamente, o que estou fazendo é primeiro importar a função Dicionário Ordenado do módulo de coleções e, em seguida, criar um dicionário ordenado, com cada letra minúscula na lista "j" sendo atribuída ao edifício correspondente, com o comprimento correspondente em sublinhados. Depois, calculo a sequência, com base na entrada do usuário, usando a f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
função e, em seguida, com base na sequência retornada por isso, os edifícios, com a letra correspondente de cada um, são impressos.