Lets say I have the following 3 tables:
Table A, Table B & Table C.
Table C has a foreign key to Table A. Table C has a foreign key to Table B.
When I delete a row from Table B I want it to delete the orphan in Table C but only if it doesn't hold any references to Table A. If it does hold a reference to table A I want it to delete the row in Table B and set the foreign key to null in table C.
Is that even possible? what is it's default behavior?
Your scenario is typical "Business requirement" not a "cascade" requirement.
As in detail discussed here: When/Why to use Cascading in SQL Server? (mechanism behind is the same for SQL cascade delete / NHibernate cascade delete)
Again, while these are about feature on a SQL server, they apply to NHibernate cascade feature as well.
So, in your case, where there is a pretty complex logic about deletion, the answer should be: