NancyLouise, you and your family have been under tremendous stress and it is situations like these that do cause irreparable harm in family relationships.
My advice for you is to consider seeing a grief counselor with at least your husband and maybe John, too.
You know, we all deal with death differently and I think maybe you expected something from John that he just couldn't deliver.
Maybe he was scared and saddened to see his grandmother ill and dying and did not know how to deal with those emotions. It's so hard when you are that young to accept death anyway and to be around someone you love and seeing it is, in my opinion, a lot to ask of someone that young. I'm sure he was bewildered by how to act around her and also by his feelings regarding her death.
At 21, waiting six months for something is a long time, too. You said he is selfish and irresponsible, which I read as immature, which is by definition, the inability to postpone gratification. Immature people want everything now!
You have invested a lot in John and I understand that you feel he betrayed you by not doing what you wanted him to do--be there for his dad and grandmother, and for you. For your sake, I do hope you can eventually forgive John, not just for John's sake or for your husband's, but for you. You need to work through the hate and realize that you can be disappointed in someone's actions without letting that disappointment ruin your marriage and essentially eat you up.
I'm hoping you will find a way to make peace with yourself and then with your husband, and then finally, with John.