To add on to what you said, the rhyming is usually in the direction of easier sounds for children to make. Kids will struggle with R a lot more than D, so you get Richard -> Rick -> Dick but not David -> Dave -> Rave, for example.
Now all I can think is how there was a Janet in my family and none of us children could say her name, so she became Janice to us forever even as adults.
There are also a lot of nicknames for Margaret (Marge, Madge, Maggie, etc), I guess because there just aren't nearly as many biblical names for women/girls so people wanted to get creative.
Jack is also used for James, since it is the equivalent of Jacques in French and Giacomo in Italian. The apostle was actually called Yakov, after Jacob, which is the root of all those names.
• Richard -> Rick -> Dick
• William -> Will -> Bill -> Billy
• Robert -> Rob -> Bob -> Bobby
• Margaret -> Meg -> Peg -> Peggy
• Edward -> Ed -> Ned | Ted -> Teddy
A lot of common names also have just a variant which barely seems related:
• Henry -> Harry
• John -> Jack
• James -> Jim
And you'll have to Google for all the nicknames for "Elizabeth" because I can't remember them all.
What we lack for creativity in names themselves, we make up for with creative nicknames because every other kid is called Elizabeth.