"The rules" are pretty clear.

The NEC has allowed use of building steel for grounding transformer windings for ... well, as far as I know.

Considering the building steel, and the usual rebar as a "Ufer" or concrete-encased electrode was something of a debateable item, until the 2011 code language made clear that it was acceptable, even with only the 'usual' tie wires.

Some concerns have been raised (in other discussions) regarding building steel that isn't in contact with other steel, but might become 'hot.' That issue really isn't relevant here; I defy anyone to connect structural iron with multiple 1-1/4" bolts and NOT have them bonded well enough to sneeze at a lightning bolt- and that's without considering the massive bare copper wires we have in this building, exothermically welded to the various columns.

I have encountered some confusion over the years, as to exactly what one accomplished by 'grounding' a service. What's important to recognize here is that the electricity from the secondary of that transformer has only one place it wants to go: back to that transformer. It doesn't want to go to the PoCo, into Mother Earth, or anywhere else. That's the concept at the heart of 'separately derived systems.'

What bonding the various systems together accomplishes is that it ensures that all the 'neutrals' are at the same potential, relative to each other. That's a direct result of our having the neutrals bonded to the grounds; our neutrals may be 'isolated,' but the grounds are not ... so the 'separate' systems are actually indirectly connected.

A lot has been written about what neutrals do, and why we ground them. While we can all understand fault clearing and static dissipation, the other reasons are not so well understood. You'll hear things like 'provides a ground reference' or 'stabilizes voltage swings in response to loads,' but these concepts are not nearly as well understood as the fancy words might lead you to expect. This is why, IMO, Article 250 of the NEC has been in such great need of serious editing for decades. Code language there is often derived from concepts that have long since been abandoned. The past few code cycles have done a great deal to clear things up.