Adding properties to a shader node
Wire it up in a setter.
Touched on this in answer to How to Update NodeSocketString Value inside a node group in a attribute node using python
As noted in question self.id_data is the node tree, not the node, and self is the property group.  Even without being defined a property group has a name property.
Will use this to, when trying to set a value, look over the node tree first and assign any emmission shader's name to its &quot;myaddon&quot; pointer property name, then use this to look up what the node is.
Sounds confusing? have added a simple example and tested in py console.
import bpy

def wire_up(node_tree, nodetype):
    nodes = (n for n in node_tree.nodes if n.type == nodetype)
    for n in nodes:
        n.myaddon.name = n.name

def update_color(self, context):
    print(&quot;Updating Value&quot;)
    
  
def get_node(self):
    print(&quot;Getting Value&quot;)
    return self.get(&quot;color&quot;, (1.0,1.0,1.0,1.0))

def set_node(self, value):
    print(&quot;Setting Value&quot;)
    wire_up(self.id_data, 'EMISSION')
    self['color'] = value
    node = self.id_data.nodes.get(self.name)
    if node:
        print(node)
    else:
        print(&quot;Node not found&quot;)
            
class MyEmissionSettings(bpy.types.PropertyGroup):
    color: bpy.props.FloatVectorProperty(
        subtype='COLOR',
        min=0.0, max=1.0, size=4,
        default=(1.0,1.0,1.0,1.0),
        #update=update_color,
        get=get_node,
        set=set_node,
        ) 

bpy.utils.register_class(MyEmissionSettings)
        
bpy.types.ShaderNodeEmission.myaddon = bpy.props.PointerProperty(type=MyEmissionSettings)

Test Run
&gt;&gt;&gt; mat = bpy.data.materials.new(&quot;Test&quot;)
&gt;&gt;&gt; mat.use_nodes = True
&gt;&gt;&gt; mat.node_tree.nodes.new(&quot;ShaderNodeEmission&quot;)
bpy.data.materials['Test'].node_tree.nodes[&quot;Emission&quot;]

&gt;&gt;&gt; mat.node_tree.nodes.new(&quot;ShaderNodeEmission&quot;)
bpy.data.materials['Test'].node_tree.nodes[&quot;Emission.001&quot;]

&gt;&gt;&gt; en1 = mat.node_tree.nodes['Emission']
&gt;&gt;&gt; en2 = mat.node_tree.nodes['Emission.001']
&gt;&gt;&gt; en1.myaddon.color[:]
Getting Value
(1.0, 1.0, 1.0, 1.0)

&gt;&gt;&gt; en1.myaddon.color = (1, 0, 0, 1)
Setting Value
&lt;bpy_struct, ShaderNodeEmission(&quot;Emission&quot;) at 0x7fa0bddf8c08&gt;

&gt;&gt;&gt; en1.myaddon.color[:]
Getting Value
(1.0, 0.0, 0.0, 1.0)

&gt;&gt;&gt; en2.myaddon.color = (0, 0, 1, 1)
Setting Value
&lt;bpy_struct, ShaderNodeEmission(&quot;Emission.001&quot;) at 0x7fa096f38e08&gt;