Logically, anatomy face relation to weight paint should be like this…
And yet, some deformation are still unnatural…
What’s the best method to approach places that may unnaturally bend such as the arm, places that squash and stretch,
knee and hips to get the best most precise squashing and stretching with only weight paint?
Post some images of your model please, or the model itself then we can see what the problems you are having might be. It is impossible to answer you with just what you have said so far…
Generally when rigging a mesh, I would use “Automatic Weights” parent then tweak the setup with Weight Painting. It can be a long process to try and do it from scratch just by manually weight painting. Make sure you have no unapplied rotations or scales on either the mesh or armature in Object mode before you do the parent operation.
“Only weight paint” will not work. Just as important to the success of deformations in areas like the shoulders (arguably the most difficult joints to handle on the human form) is the mesh topology. To paraphrase a famous statement about matter & energy, “Vertex weight tells the mesh how to move, topology tells the mesh what shape to take while moving.” The structure of the mesh (topology) at joints must be conducive to achieving all the possible deformations that area of the mesh requires. For many joints (e.g., knees & elbows) that means an increased density of edge loops around the joint, so stretching caused by flexing can be distributed over a number of loops, avoiding extreme distortion. For an area like the shoulders, where the DoF (degrees of freedom, not depth of field) the joint has means stretching can happen in many directions, it is nearly impossible to accomplish a perfect blend of topology & vertex weighting, one can only come as close as possible. When visible errors in the deformation are unavoidable, some form of corrective influence must be applied, either using Shape Keys or special bones to tug the deformation into its proper place.
One consideration in the flexing of joints like knees and elbows, where the flexing can be extreme, is controlling the volume of the mesh at the joints. Meshes are not skin covering living tissue and bone, so when flexed they have a tendency to collapse on the inside of the joint, a distortion often called the “soda straw” effect. Even the best simple weight painting cannot eliminate this effect entirely, so some form of corrective mechanism is often used, either in terms of hard-coded options designed to counter the effect, or with additional influences like shape keys and corrective helper bones.
Another consideration is how close to actual human anatomy you want your mesh to be. Highly accurate anatomical forms need a great deal more attention to topology that can preserve the forms though all deformations than more stylized forms like most cartoon characters exhibit. When proper human anatomy is a major concern, many more influences beyond “only weight paint” must be used.
Some uses of animated meshes place limitations on how accurate and effective the possible deformations can be. Game models, which are limited by vertex count, skeleton structure, and use of influences beyond the skeleton, often exhibit very poor deformations in problem areas like shoulders, even when the games are otherwise very highly developed visually. This is an example of where compromise must be accepted, since there are limits to how much can be done to correct problems inherent in using meshes. It’s also an illustration of a good rule for designing a human mesh – keep it as simple as possible for the uses to which it is intended, avoiding overly-dense meshes (too many vertices) while at the same time insuring the deformations work well.
As you might have realized reading the above, there are only a few “best methods” for achieving proper deformations of the human form, and most of them do not involve only weight paint. Vertex weighting is the very beginning of the process of getting good mesh deformation at joints, and how far beyond that beginning you need to go is highly dependent on the intended use of the mesh.