How do I support Drag and Drop in the Custom Inspector?

If you look here: Working with arrays as SerializedProperty(ies) in editor script

The latest iteration of code is:

private static void DrawPropertyArray(SerializedProperty property, ref bool fold) {
    fold = EditorGUILayout.Foldout(fold, new GUIContent(
        property.displayName,
        "These are the waypoints that will be used for the moving object's path."), true);
    if (!fold) return;
    var arraySizeProp = property.FindPropertyRelative("Array.size");
    EditorGUILayout.PropertyField(arraySizeProp);

    EditorGUI.indentLevel++;

    for (var i = 0; i < arraySizeProp.intValue; i++) {
        EditorGUILayout.PropertyField(property.GetArrayElementAtIndex(i));
    }

    EditorGUI.indentLevel--;
}

Which is almost a perfect 1:1 on how using SerializeField on an array would be. The only difference is that dragging and dropping something on the Array’s name doesn’t add to the Array like it does with SerializeField. What would need to be done to support this type of drag and drop functionality?

All solutions for making custom array/list property drawers / editors that ive seen use Unity’s internal ReorderableList class explained here:

Here is one implementation:
So far I’ve found a few clones of this: