Is it possible to create a node with some different code from the bitcoin nodes but still able to talk to the bitcoin nodes? Is it possible for someone to customize their own node to add some functionality but still connect to bitcoin network and talk to other nodes?
Bitcoin nodes are just software that implements the Bitcoin P2P protocol. There are many software packages out there that do so (including full nodes, standalone wallets, indexing software, ...). There is no magic sauce that somehow blesses a particular piece of software into the realm of nodes - anything that speaks the protocol will do.
Furthermore, most of these (and probably all the ones you should care about) are open source, so making modifications to add functionality yourself is very much possible.