How to use a weight to check if an object is stable?
Ok, so I think I found a solution

def create_cubes():
#board=table without the legs
h=board_height
d=board.dimensions
l=board.location
r=0.3
#First cube
bpy.ops.mesh.primitive_cube_add(radius=r, location=(l.x-d.x/2+3*r, l.y+d.y/2-3*r, h+d.z+r))
add_rigidbody()
cube1=bpy.context.active_object
cube1.name = "Cube" + str(1)
validation_cubes.append(cube1)
bpy.data.scenes['Scene'].objects.unlink(bpy.data.objects["Cube" + str(1)])
#Second cube
bpy.ops.mesh.primitive_cube_add(radius=r, location=(l.x, l.y+d.y/2-2*r, h+d.z+r))
add_rigidbody()
cube2=bpy.context.active_object
cube2.name = "Cube" + str(2)
validation_cubes.append(cube2)
bpy.data.scenes['Scene'].objects.unlink(bpy.data.objects["Cube" + str(2)])    
#Third cube
bpy.ops.mesh.primitive_cube_add(radius=r, location=(l.x+d.x/4, l.y-d.y/2+3*r, h+d.z+r))
add_rigidbody()
cube3=bpy.context.active_object
cube3.name = "Cube" + str(3)
validation_cubes.append(cube3)
bpy.data.scenes['Scene'].objects.unlink(bpy.data.objects["Cube" + str(3)])   


Now you have defined the locations for three cubes. These locations will be the same, no matter how you scale the board or the radius of the cube.The cubes are named and placed in the list validation_cubes, unliked from the mesh

Then you simply need to create a loop that links back each cube, one at a time, so that the cubes don't affect eachother

def validate_table():
create_cubes()
for x in range(0,3):
    bpy.data.scenes['Scene'].objects.link(bpy.data.objects[validation_cubes[x].name])
    append_physics()