I wonder, how does one put properties on a Tile?
so that It could only appear when it has certain set of rules.

For example, I want to make tile A only has tile B on top of it and will not have Tile C on top of it.

Is there an easy way to go about this?

Not sure if it's possible to cram arbitrary custom properties into a tile. TileMap is probably not optimized for that.

But you really don't need to. If you're trying to implement wave function collapse algorithm for map generation, simply create a custom class that holds all relevant wfc tile data. Populate an array with objects of that class and do wfc iterations on that array. Once the map is generated, transfer the tile type data to actual tile map.