well for the building itself, it looks like you're going to want to use a 2d array or ds_grid to store the building cells (empty, building frame, elevator, shop). if you can actually find a working tutorial on diablo-style inventory management, the concepts in building that type of inventory system should transfer almost directly in regards to placing multi-cell items (or in your case, rooms) on the grid and tying these mutli-celled items/rooms together.
hhh i'm not sure if you can do this, but you could consolidate having separate grids for each "layer" of the building (room ids, electricity, phone, cable, etc.) if it's possible to cram a 1d array into every cell of a single grid. thus, each cell would contain all the information. if not, utilities are probably more T/F so you could use binary numbers in one grid to handle all utilities and another grid to handle room ids, that way you would still cut down on the amount of grids per layer.
you could possibly then use a controller object to manage payouts for detected room ids that generate money, deductions for room ids that drain money, and so on.