Object property getter infinite loop
So, based on this Duplicating object and default value of property I think I found a way.

I use a second identical property to avoid having to get from the getter

Here it is : 

# Getter for anchor duplicate
def get_global_index(self):


    # get current index
    index = self.hidden_index

    # chek if already used (in case of a duplicate) and try a new one while necessary
    # Do not forget to remove self from result !    
    anchors = [obj for obj in bpy.context.scene.objects if obj.type == 'EMPTY' and obj.empty_draw_type == 'PLAIN_AXES' and obj != self]

    while any(obj.hidden_index == index for obj in anchors):
        # found to try another index
        index +=1


    self.hidden_index = index;
    return self.hidden_index

def register():
    bpy.types.Object.global_index = bpy.props.IntProperty(name = "Object index for Anchors", default = 0, get=get_global_index)
    bpy.types.Object.hidden_index = bpy.props.IntProperty(default = 0, options={'HIDDEN'})


Since it the getter, I just need to return the new value. Using an other property without getter but with the same value, I can get the copied value from the getter.