Transaction propagation criteria vs mempool inclusion cirteria Do Bitcoin nodes propagate every transaction or only transactions that meet certain criteria? For instance, a transaction with a fee of 0 won't necessarily get included into a block and it might even be excluded from a node's mempool but would that transaction still get propagated throughout the entire network? Or can node choose not to propagate certain transactions? 

If there is some criteria to which transactions get propagated what are they? I am guessing at the very least that nodes won't propagate invalid transactions?
There are also the 'standardness rules', which are separate from 'validity rules'. So this means a transaction can be either valid and standard, valid but non-standard, or invalid. 

A node can choose to broadcast any transaction it would like to the network, or none at all. 

If a node broadcasts invalid transactions, then it is likely that its peers will disconnect, due to misbehaviour. An invalid transaction cannot possibly be included in a valid block. 

The bitcoin-core core code does not relay non-standard transactions, but it will still accept blocks that include them (since they are still valid). This lack of relaying the non-standard transactions is a safety measure to prevent DoS attacks, etc. You can find some good info about issues with relaying non-standard transactions here.

Even for standard transactions, there is no stipulation that requires a node to relay them through the network. Many nodes will do so, but this is entirely up to that specific node's policy.