How to add custom property to bone in pose mode with python?
1st Method


Assign a custom property to an existing type

"type" are blender data types please note that "Bone" is different from "PoseBone" type
"custom_float2" is just random name it can be anything you like

bpy.types.PoseBone.custom_float2 = bpy.props.FloatProperty(name="Test Prob", default=0.3, min=0.0, max=1)

For more description on Creation of Custom property
Then Assign it to the bone you wish to use it with

bpy.data.objects["Armature"].pose.bones["Bone"].custom_float2 = 2.0


Select the bone in pose mode and you will see the custom property
Note: bones["Bone"].custom_float2 is unique from bones["Bone 2"].custom_float2 and bones["Bone 3"].custom_float2 just you have to repeat step 2 to assing custom property to other bones





2nd Method

Create the property. Assigning some value is very important.

pbone = bpy.data.objects["Armature"].pose.bones["Bone"]
pbone['myControl'] = 0


Now as Jerryno pointed To change min, max, softmin or softmax you need to adjust the _RNA_UI_ dictionary with those parameters.
There are few things have to be kept in mind.

_RNA_UI is a single dictionary for all ID-Properties for any given object.

we have to check if this _RNA_UI dictionary exists if not create

if "_RNA_UI" not in pbone.keys():
            pbone["_RNA_UI"] = {}


And we have to use update() method to append this dictionary

pbone["_RNA_UI"].update({"myControl": {"min":0.0, "max":1.0, "soft_min":0.0, "soft_max":1.0}})